// 导入store
import store from '@/store'
import router from '@/router'

// 导入axios
import axios from 'axios'
// 导入之后，配置 axios
const request = axios.create({
  baseURL: 'http://www.liulongbin.top:3008'
  // headers: { Authorization: token字符串 }
})

// 给全局加，所有的都加
// axios.defaults.headers.common['Authorization'] = token字符串

// 想精确控制，使用请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // config 就是请求的配置对象。参见：axios中文网
    // config.headers.Authorization = token值
    if (config.url.startsWith('/my/')) {
      config.headers.Authorization = store.state.user.token
    }
    return config
  }
  // function (error) {
  //   // 对请求错误做些什么（有多个axios实例的情况下，才有可能遇到错误。否则遇不上）
  //   return Promise.reject(error)
  // }
)

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // error.response 是一个对象，类似于 请求成功中的 result 对象
    if (error.response) {
      const { data: res } = error.response
      if (res.code === 1 && res.message === '身份认证失败！') {
        // 进入这里，说明 用户用了 过期的 或者 假的token
        store.commit('user/updeteToken', '')
        store.commit('user/updeteUser', {})
        router.push('/login')
      }
    }
    return Promise.reject(error)
  }
)

// 导出
export default request
